home *** CD-ROM | disk | FTP | other *** search
/ ftp.mactech.com 2010 / ftp.mactech.com.tar / ftp.mactech.com / macintosh-c / macc-carbon-demos-nonbinhex.sit / macc-carbon-demos-nonbinhex / chap22-demo-carbon events / DialogList.c next >
Text File  |  2001-05-15  |  6KB  |  168 lines

  1. // *******************************************************************************************
  2. // DialogLists.c                                                           CLASSIC EVENT MODEL
  3. // *******************************************************************************************
  4.  
  5. // ………………………………………………………………………………………………………………………………………………………………………………………………………………………… includes
  6.  
  7. #include "Lists.h"
  8.  
  9. // ***************************************************************************** doListsDialog
  10.  
  11. void  doListsDialog(void)
  12. {
  13.     DialogPtr                dialogPtr;
  14.     GrafPtr                    oldPort;
  15.     ModalFilterUPP    eventFilterUPP;
  16.     ControlRef            dateFormatControlRef, watermarkControlRef, controlRef;
  17.     ListHandle            dateFormatListHdl, watermarkListHdl;
  18.     SInt16                    itemHit;
  19.     Cell                        theCell;
  20.     SInt16                    dataLen, offset;
  21.     Str255                    dateFormatString, watermarkString;
  22.     Boolean                    wasDoubleClick = false;
  23.  
  24.     // …………………………………………………………………… explicitly deactivate front window if it exists, create dialog
  25.  
  26.     if(FrontWindow())
  27.         doActivateDeactivate(FrontWindow(),false);
  28.  
  29.     if(!(dialogPtr = GetNewDialog(rListsDialog,NULL,(WindowRef) -1)))
  30.         ExitToShell();
  31.  
  32.     GetPort(&oldPort);
  33.     SetPortDialogPort(dialogPtr);
  34.     
  35.     // …………………………………………………………………………………………………………………………………………………………………………… set default push button
  36.  
  37.     SetDialogDefaultItem(dialogPtr,kStdOkItemIndex);
  38.  
  39.     // ………………………………………………………………………… create universal procedure pointer for event filter function
  40.  
  41.     eventFilterUPP = NewModalFilterUPP((ModalFilterProcPtr) eventFilter);
  42.  
  43.     // …………………………… add rows to lists, store data in their cells, modify cell selection algorithm
  44.  
  45.     GetDialogItemAsControl(dialogPtr,iDateFormatList,&dateFormatControlRef);
  46.     GetControlData(dateFormatControlRef,kControlEntireControl,kControlListBoxListHandleTag,
  47.                                  sizeof(dateFormatListHdl),&dateFormatListHdl,NULL);
  48.  
  49.     doAddRowsAndDataToTextList(dateFormatListHdl,rDateFormatStrings,17);
  50.  
  51.     SetListSelectionFlags(dateFormatListHdl,lOnlyOne);
  52.  
  53.     SetPt(&theCell,0,0);
  54.     LSetSelect(true,theCell,dateFormatListHdl);
  55.  
  56.     GetDialogItemAsControl(dialogPtr,iWatermarkList,&watermarkControlRef);
  57.     GetControlData(watermarkControlRef,kControlEntireControl,kControlListBoxListHandleTag,
  58.                                  sizeof(watermarkListHdl),&watermarkListHdl,NULL);
  59.  
  60.     doAddRowsAndDataToTextList(watermarkListHdl,rWatermarkStrings,12);
  61.  
  62.     SetListSelectionFlags(watermarkListHdl,lOnlyOne);
  63.  
  64.     SetPt(&theCell,0,0);
  65.     LSetSelect(true,theCell,watermarkListHdl);
  66.  
  67.     // ……………………………………………………………………………………………………………………………………………… show dialog and set keyboard focus
  68.  
  69.     ShowWindow(GetDialogWindow(dialogPtr));
  70.  
  71.     SetKeyboardFocus(GetDialogWindow(dialogPtr),dateFormatControlRef,1);
  72.  
  73.     // ……………………………………………………………………………………………………………………………………………………………………………… enter ModalDialog loop
  74.  
  75.     do
  76.     {
  77.         ModalDialog(eventFilterUPP,&itemHit);
  78.  
  79.         if(itemHit == iDateFormatList)
  80.         {
  81.             SetPt(&theCell,0,0);
  82.             LGetSelect(true,&theCell,dateFormatListHdl);
  83.             LGetCellDataLocation(&offset,&dataLen,theCell,dateFormatListHdl);
  84.             LGetCell(dateFormatString + 1,&dataLen,theCell,dateFormatListHdl);
  85.             dateFormatString[0] = (SInt8) dataLen;
  86.     
  87.             GetDialogItemAsControl(dialogPtr,iDateFormatStaticText,&controlRef);
  88.             SetControlData(controlRef,kControlEntireControl,kControlStaticTextTextTag,
  89.                                          dateFormatString[0],&dateFormatString[1]);
  90.             Draw1Control(controlRef);
  91.     
  92.             GetControlData(dateFormatControlRef,kControlEntireControl,
  93.                                          kControlListBoxDoubleClickTag,sizeof(wasDoubleClick),&wasDoubleClick,
  94.                                          NULL);
  95.         }
  96.         else if(itemHit == iWatermarkList)
  97.         {
  98.             SetPt(&theCell,0,0);
  99.             LGetSelect(true,&theCell,watermarkListHdl);
  100.             LGetCellDataLocation(&offset,&dataLen,theCell,watermarkListHdl);
  101.             LGetCell(watermarkString + 1,&dataLen,theCell,watermarkListHdl);
  102.             watermarkString[0] = (SInt8) dataLen;
  103.  
  104.             GetDialogItemAsControl(dialogPtr,iWatermarkStaticText,&controlRef);
  105.             SetControlData(controlRef,kControlEntireControl,kControlStaticTextTextTag,
  106.                                          watermarkString[0],&watermarkString[1]);
  107.             Draw1Control(controlRef);
  108.             
  109.             GetControlData(watermarkControlRef,kControlEntireControl,
  110.                                          kControlListBoxDoubleClickTag,sizeof(wasDoubleClick),&wasDoubleClick,
  111.                                          NULL);
  112.         }
  113.  
  114.     } while(itemHit != kStdOkItemIndex &&    wasDoubleClick == false);
  115.  
  116.     // …………………………………………………………………………………………………………………………………………………………………………………………………………………… clean up
  117.  
  118.     DisposeDialog(dialogPtr);
  119.     DisposeModalFilterUPP(eventFilterUPP);
  120.  
  121.     SetPort(oldPort);
  122. }
  123.  
  124. // ******************************************************************************* eventFilter
  125.  
  126. Boolean  eventFilter(DialogPtr dialogPtr,EventRecord *eventStrucPtr,SInt16 *itemHit)
  127. {
  128.     Boolean            handledEvent;
  129.     GrafPtr            oldPort;
  130.     SInt8                charCode;
  131.     ControlRef    controlRef, focusControlRef;
  132.     ListHandle    watermarkListHdl;
  133.     
  134.     handledEvent = false;
  135.  
  136.     GetPort(&oldPort);
  137.     SetPortDialogPort(dialogPtr);
  138.  
  139.     if(eventStrucPtr->what == keyDown)
  140.     {
  141.         charCode = eventStrucPtr->message & charCodeMask;
  142.             
  143.         if(charCode != kUpArrow && charCode != kDownArrow && charCode != kTab)
  144.         {
  145.             GetDialogItemAsControl(dialogPtr,iWatermarkList,&controlRef);
  146.             GetControlData(controlRef,kControlEntireControl,kControlListBoxListHandleTag,
  147.                                          sizeof(watermarkListHdl),&watermarkListHdl,NULL);
  148.             GetKeyboardFocus(GetDialogWindow(dialogPtr),&focusControlRef);
  149.             if(controlRef == focusControlRef)
  150.             {
  151.                 doTypeSelectSearch(watermarkListHdl,eventStrucPtr);
  152.                 Draw1Control(controlRef);
  153.             }
  154.                 
  155.             handledEvent = true;
  156.         }
  157.     }
  158.     else
  159.     {
  160.         handledEvent = StdFilterProc(dialogPtr,eventStrucPtr,itemHit);
  161.     }
  162.  
  163.     SetPort(oldPort);
  164.  
  165.     return handledEvent;
  166. }
  167.  
  168. // *******************************************************************************************